Skip to main content

DeckGL Modules

The main difference in using Brix WS compared to the previous version of Brix is the method of sending data to CityScope for visualization. The previous version of Brix allowed for various pre-defined visualizations, such as numeric with bars or graphs, heatmaps, or ABM, among others. While this was useful, it didn't offer enough flexibility for module makers to create complex visualizations with a variety of different elements. They were always constrained to using the same method to display data.

To address this issue, Brix WS introduces DeckGL modules, a new type of module that can harness the full power of DeckGL and create robust visualizations using multiple DeckGL layers.

The structure of the data that DeckGL modules should follow is an array of objects, where each object represents one layer of the visualization. Every layer always has the same three properties:

  • type: The type of the layer.
  • data: The data to be represented.
  • properties: Additional properties to configure the visualization of the layer.
[
{"type":"column","data":$data,"properties":{}},
{"type":"arc","data":$data,"properties":{}},
{"type":"column","data":$data,"properties":{}},
...
]

Available DeckGL Layers

At the time being, the available DeckGL layers that can be use in the modules are the following:

This list will grow over time to include all the layers in DeckGL. In each of the links, you can view an example of the visualization that the layer creates.

Arc

The arc layer should follow the schema of the next example:

    {
"type": "arc",
"data":[
{
"from": {
"coordinates": [-122.269029, 37.80787]
},
"to": {
"coordinates": [-122.271604, 37.803664]
},
"sourceColor": [255, 140, 0],
"targetColor": [100, 140, 0]
},
],
"properties": {
"width": 20
}
}

The available properties for this layer are the following:

  • width: integer, default value 12.

Column

The column layer should follow the schema of the next example:

    {
"type": "column",
"data":[
{"centroid": [-122.4, 37.7], "value": 0.2},
],
"properties": {
"disResolution": 12,
"radius": 25
}
}

The available properties for this layer are the following:

  • disResolution: integer, default value 12.
  • radius: integer, default value 30.
  • extruded: boolean, default value true.
  • pickable: boolean, default value true.
  • elevationScale: integer, default value 1.

Contour

The contour layer should follow the schema of the next example:

    {
"type": "contour",
"data":[
{"coordinates": [-122.42177834, 37.78346622]}
],
"properties": {
"cellSize": 100
}
}

The available properties for this layer are the following:

  • cellSize: integer, default value 200.

GeoJson

The GeoJson layer should follow the schema of the next example:

    {
"type": "geojsonbase",
"data": $validGeoJsonObject,
"properties": {
"filled": false
}
}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • stroked: boolean, default value false.
  • filled: boolean, default value true.
  • extruded: boolean, default value true.
  • pointType: string, default value 'circle'.
  • lineWidthScale: integer, default value 20.
  • lineWidthMinPixels: integer, default value 100.
  • pointRadius: integer, default value 100.
  • lineWidth: integer, default value 1.
  • elevation: integer, default value 30.

Grid

The Grid layer should follow the schema of the next example:

    {
"type": "gridlayer",
"data": [{"coordinates": [-122.42177834, 37.78346622]}],
"properties": {
"cellSize": 100
}
}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • extruded: boolean, default value true.
  • cellSize: integer, default value 200.
  • elevationScale: integer, default value 4.

GridCell

The GridCell layer should follow the schema of the next example:

    {
"type": "gridcell",
"data": [{"centroid": [-122.42177834, 37.78346622], "value": 100}],
"properties": {
"cellSize": 100
}
}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • extruded: boolean, default value true.
  • cellSize: integer, default value 200.
  • elevationScale: integer, default value 5000.

Heatmap

The heatmap layer should follow the schema of the next example:

    {
"type": "heatmap",
"data": [{"coordinates": [-122.42177834, 37.78346622], "weight": 100}],
"properties": {
}
}

Hexagon

The Hexagon layer should follow the schema of the next example:

    {
"type": "hexagon",
"data": [{"coordinates": [-122.42177834, 37.78346622]}],
"properties": {
"elevationScale": 3
}
}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • extruded: boolean, default value true.
  • radius: integer, default value 200.
  • elevationScale: integer, default value 4.

Icon

The Icon layer should follow the schema of the next example:

    {
"type": "icon",
"data": [{"coordinates": [-122.42177834, 37.78346622], "icon": $url, "width": 128, "height": 128, "anchorY": 128, "elevation": 30}],
"properties": {
"sizeScale": 3
}
}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • sizeScale: integer, default value 10.
  • sizeMaxPixels: integer, default value 10.

Line

The line layer should follow the schema of the next example:

    {
"type": "line",
"data":[
{
"from": {
"coordinates": [-122.269029, 37.80787]
},
"to": {
"coordinates": [-122.271604, 37.803664]
},
"color": [255, 140, 0]
},
],
"properties": {
"width": 20
}

}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • width: integer, default value 50.

Path

The Path layer should follow the schema of the next example:

    {
"type": "path",
"data":[
{
"path": [[-122.269029, 37.80787],[-122.271604, 37.803664],[-122.271604, 38.803664]],
"color": [255, 140, 0],
"width": 5
},
],
"properties": {
"widthScale": 30
}

}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • widthScale: integer, default value 20.
  • widthMinPixels: integer, default value 2.

ScatterPlot

The ScatterPlot layer should follow the schema of the next example:

    {
"type": "scatterplot",
"data":[
{"name": "Colma (COLM)", "address”: "365 D Street, Colma CA 94014", "exits”: 4214, "coordinates": [-122.466233, 37.684638]},
],
"properties": {
"lineWidthMinPixels": 2
}

}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • stroked: boolean, default value true.
  • filled: boolean, default value true.
  • radiusScale: integer, default value 6.
  • radiusMinPixels: integer, default value 1.
  • radiusMaxPixels: integer, default value 100.
  • lineWidthMinPixels: integer, default value 1.

Scenegraph

The Scenegraph layer should follow the schema of the next example:

    {
"type": "scenegraph",
"data":[
{"coordinates": [-122.466233, 37.684638]},
],
"properties": {
"scenegraph": "https://raw.githubusercontent.com/KhronosGroup/glTF-Sample-Models/master/2.0/BoxAnimated/glTF-Binary/BoxAnimated.glb"
}

}

The available properties for this layer are the following:

  • pickable: boolean, default value true.
  • scenegraph: string, url of the glb object.
  • sizeScale: integer, default value 500.

SimpleMesh

The SimpleMesh layer should follow the schema of the next example:

    {
"type": "simpleMesh",
"data":[
{
"position": [-122.45, 37.7],
"angle": 0,
"color": [255, 0, 0]
},
{
"position": [-122.46, 37.73],
"angle": 90,
"color": [0, 255, 0]
},
],
"properties": {
"mesh": "https://raw.githubusercontent.com/visgl/deck.gl-data/master/website/humanoid_quad.obj"
}

}

The available properties for this layer are the following:

  • sizeScale: integer, default value 1.
  • mesh: string, url of the obj object.

TextLayer

The Text layer should follow the schema of the next example:

    {
"type": "textLayer",
"data":[
{
"coordinates": [-122.45, 37.7],
"text": "example",
},
{
"position": [-122.46, 37.73],
"text": "example",
},
],
"properties": {
}

}

The available properties for this layer are the following:

  • pickable: boolean, default value true.